首页 > 试题广场 >

怪数

[编程题]怪数
  • 热度指数:1477 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

M突然对怪数产生了兴趣。假设一个数n,如果[n/1]+[n/2]+...+[n/k](k为趋近于正无穷的正整数)为一个偶数,那么这个数是一个怪数,现在给定一个区间[a,b],求[a,b]之间有多少怪数。

[x]表示不大于x的最大整数。


输入描述:
输入只包含一行,有两个非负整数a,b(0<=a,b<=2^31,a<=b)。


输出描述:
输出区间[a,b]中的怪数的个数。
示例1

输入

0 10

输出

6
a, b = list(map(int, input().split(" ")))
s = 0

i = int(a ** 0.5)
if i % 2 == 0:
    if (i + 1) ** 2 >= a:
        s += (i + 1) ** 2 - a
    i += 2
else:
    i += 1
while i ** 2 <= b:
    if (i + 1) ** 2 <= b:
        s += (i + 1) ** 2 - i ** 2
    else:
        s += b - i ** 2 + 1
    i += 2
print(s)

发表于 2021-08-18 16:34:40 回复(0)